#include <SPI.h>
#include <Ethernet.h>
#include <Servo.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
EthernetServer miservidor(80); 
EthernetClient micliente;
Servo miservo;
int pos=90; 
boolean lineaActualEstaVacia = true;
char caracter;
String peticion="";

void setup() {
  Ethernet.begin(mac, ip);
  miservidor.begin();
  miservo.attach(6);
}

void loop() {
  int i;
  micliente = miservidor.available();
  if (micliente == true) {
    while (micliente.connected() == true) {
      if (micliente.available() > 0) {
        caracter = micliente.read();
        if (peticion.length() < 30 ){
                  peticion.concat(caracter);     
        }            
        if (caracter == '\n' && lineaActualEstaVacia==true) {
          micliente.println("HTTP/1.1 200 OK");
          micliente.println("Content-Type: text/html");
          micliente.println("Connnection: close");
          micliente.println("");
          micliente.println("<!DOCTYPE HTML>");
          micliente.println("<html>");
          micliente.println("<h1>Formulario de control de servos</h1>");
          if (peticion.indexOf("SentidoServo=0") > 0 ) {
              micliente.println("Sentido del movimiento actual:Izquierda <br/>");
              micliente.println("Posición angular actual:");    
              pos=pos+20;
              if (pos > 180) pos=180;
              miservo.write(pos);
              micliente.println(pos);          
          } 
          if (peticion.indexOf("SentidoServo=1") > 0 ){
              micliente.println("Sentido del movimiento actual:Derecha <br/>");
              micliente.println("Posición angular actual:");    
              pos=pos-20;
              if (pos < 0) pos=0;   
              miservo.write(pos);
              micliente.println(pos);          
          }  
          if (peticion.indexOf("SentidoServo=2") > 0 ){
              micliente.println("Sentido del movimiento actual:Vuelta completa <br/>");
              for (i=0;i<180;i++){ 
                   miservo.write(i); delay(5);
              }     
              for (i=180;i>0;i--){ 
                   miservo.write(i); delay(5);
              }
          }  
          micliente.println("<br/>");
          micliente.println("<form>");       
          micliente.println("<button type='submit' name='SentidoServo' value='0'>Izquierda</button>");
          micliente.println("<button type='submit' name='SentidoServo' value='1'>Derecha</button>");
          micliente.println("<button type='submit' name='SentidoServo' value='2'>Vuelta completa</button>");
          micliente.println("</form>");      
          micliente.println("</html>");
          break;
        }
        if (caracter == '\n') {
          lineaActualEstaVacia = true;
        } else if (caracter != '\r' ) {
          lineaActualEstaVacia = false;
        }
      }
    }
    peticion="";
    micliente.stop();
  }
}

